import java.lang.reflect.Field;

public class Test2 {
    public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException {
        String str = "abcde";
        // 先获取 String 的 class对象
        Class <?> c1 = String.class;
        // 通过这个对象，获取 String 类中的 value 字段. 这个 value 和 String 源码中的 value 是匹配的.
        // 将其拷贝到 valueField。 ---   Filed 是 字段的意思，
        // 没有找 value 字段，就会抛出一个异常 ：NoSuchFieldException - 没有 这样的字段
        Field valueField = c1.getDeclaredField("value");

// 将这个字段的访问属性设为 true，表示可以访问了
        valueField.setAccessible(true);

// 把 str 中的 value 属性获取到.（字符串，其实就是存储在堆上的数组）
        // 就好比，将 str 的String对象中 value域中存储的字符串地址拿到了
        char[] value = (char[]) valueField.get(str);

// 接下来，就是通数组的下标，去修改 value 的值
        value[0] = 'g';
        System.out.println(str);

    }
    public static void main2(String[] args) {
        String str = "abcde";
        for (int i = 0; i < 10; i++) {
            str+=i;
        }
        System.out.println(str);
    }

    public static void main1(String[] args) {
        String str = "hello";
        str =str + " world";
        str+="!!!";
        System.out.println(str);
    }
}
